const express = require('express');
const { createServer } = require('node:http');
const { join } = require('node:path');
const { Server } = require('socket.io');
const EVENT_TYPE = {
  AUTO_ROLL_CALL: 'auto_roll_call',
  BEGIN_AUTO_ROLL_CALL: 'begin_auto_roll_call',
  ADD_DOCTOR_RECORD: 'addDoctorRecord',
  RE_ADD_DOCTOR_RECORD: 're_addDoctorRecord',
  CONSULTATION: 'consultation',
  RE_CONSULTATION: 're_consultation',
  MEDICINE_CALL: 'medicineCall',
  BEGIN_MEDICINE_CALL: 'begin_medicineCall',
  EMERGEN_REPORT: 'emergen_report',
  INPSTORE_EMERGEN_REPORT: 'inspector_emergen_report',
  PC_EMERGEN_REPORT: 'pc_emergen_report',
  RE_PC_EMERGEN_REPORT: 're_pc_emergen_report',
  ALARAM: 'alarm',
  ALARAM_CONFIRM: 'alarm_confirm',
  PC_ALARAM: 'pc_alarm',
  IN_REGIS: 'in_regis',
  OUT_REGIS: 'out_regis',
  BEGIN_IN_REGIS: 'begin_in_regis',
  BEGIN_OUT_REGIS: 'begin_out_regis',
  SHEN_HE_TONG_GUO: 'shenhetonguo',
  BEGIN_SHEN_HE_TONG_GUO: 'begin_shenhetonguo',
  ADD_TASK: 'add_task',
  BEGIN_ADD_TASK: 'begin_add_task',
};

async function main() {
  const app = express();
  const server = createServer(app);
  const io = new Server(server, {
    connectionStateRecovery: {},
    // adapter: createAdapter(),
    cors: {
      origin: '*', // 允许任何来源
      methods: ['GET', 'POST'], // 允许的 HTTP 请求类型
    },
  });

  app.get('/', (req, res) => {
    res.sendFile(join(__dirname, 'index.html'));
  });

  io.on('connection', async (socket) => {
    socket.on(EVENT_TYPE.ADD_TASK, async (msg, clientOffset, callback) => {
      console.log('msg', msg);

      console.log('😈callback', callback);
      io.emit(EVENT_TYPE.BEGIN_ADD_TASK, msg);
      if (callback) callback();
    });

    socket.on(EVENT_TYPE.SHEN_HE_TONG_GUO, async (msg, clientOffset, callback) => {
      console.log('msg', msg);

      console.log('😈callback', callback);
      io.emit(EVENT_TYPE.BEGIN_SHEN_HE_TONG_GUO, msg);
      if (callback) callback();
    });

    socket.on(EVENT_TYPE.CONSULTATION, async (msg, clientOffset, callback) => {
      console.log('msg', msg);

      console.log('😈callback', callback);
      io.emit(EVENT_TYPE.RE_CONSULTATION, msg);
      if (callback) callback();
    });

    socket.on(EVENT_TYPE.EMERGEN_REPORT, async (msg, clientOffset, callback) => {
      console.log('msg', msg);

      console.log('😈callback', callback);
      io.emit(EVENT_TYPE.INPSTORE_EMERGEN_REPORT, msg);
      if (callback) callback();
    });

    socket.on(EVENT_TYPE.EMERGEN_REPORT, async (msg, clientOffset, callback) => {
      console.log('msg', msg);

      console.log('😈callback', callback);
      io.emit(EVENT_TYPE.INPSTORE_EMERGEN_REPORT, msg);
      if (callback) callback();
    });

    socket.on(EVENT_TYPE.ADD_DOCTOR_RECORD, async (msg, clientOffset, callback) => {
      console.log('msg ADD_DOCTOR_RECORD', msg);

      console.log('😈callback', callback);
      io.emit(EVENT_TYPE.RE_ADD_DOCTOR_RECORD, msg);
      if (callback) callback();
    });

    socket.on(EVENT_TYPE.PC_EMERGEN_REPORT, async (msg, clientOffset, callback) => {
      console.log('msg', msg);

      console.log('😈callback', callback);
      io.emit(EVENT_TYPE.RE_PC_EMERGEN_REPORT, msg);
      if (callback) callback();
    });

    socket.on(EVENT_TYPE.AUTO_ROLL_CALL, async (msg, clientOffset, callback) => {
      console.log('type', EVENT_TYPE.AUTO_ROLL_CALL);
      console.log('msg', msg);

      console.log('😈callback', callback);
      io.emit(EVENT_TYPE.BEGIN_AUTO_ROLL_CALL, msg);
      if (callback) callback();
    });

    socket.on(EVENT_TYPE.MEDICINE_CALL, async (msg, clientOffset, callback) => {
      console.log('msg', msg);

      console.log('😈callback', callback);
      io.emit(EVENT_TYPE.BEGIN_MEDICINE_CALL, msg);
      if (callback) callback();
    });

    socket.on(EVENT_TYPE.OUT_REGIS, async (msg, clientOffset, callback) => {
      console.log('msg', msg);

      console.log('😈callback', callback);
      io.emit(EVENT_TYPE.BEGIN_OUT_REGIS, msg);
      if (callback) callback();
    });

    socket.on(EVENT_TYPE.IN_REGIS, async (msg, clientOffset, callback) => {
      console.log('msg', msg);

      console.log('😈callback', callback);
      io.emit(EVENT_TYPE.BEGIN_IN_REGIS, msg);
      if (callback) callback();
    });
  });

  const port = 3000;

  server.listen(port, () => {
    console.log(`server running at http://localhost:${port}`);
  });
}

main();
